package com.wudd.entity.Do;

//推荐
//评论
//2
//
//手记 /后端开发
//Spring Boot Bean生命周期
//2018.07.26 22:07 562浏览
//
//注：Spring Boot Bean的生命周期，什么是Bean的生命周期，就是Bean从创建到销毁的过程。
//
//Bean的生命周期过程描述
//
//我们先看一下Bean的生命周期过程中都会经历些什么，我先简单解释一下，后面我们通过源码进行详细解释。首先Spring在实例化Bean的时候，会先调用它的构造函数，进行Bean的实例化，然后进行Bean的初始化，Bean的初始化经过三个阶段初始化之前（applyBeanPostProcessorsBeforeInitialization），其次是进行初始化（invokeInitMethods），最后是初始化之后（postProcessAfterInitialization），这就是Bean的初始化过程；然后就开始利用Bean进行业务逻辑处理，最后容器正常关闭，Spring开始销毁Bean，Bean的销毁过程相对比较简单，调用DisposableBeanAdapter.destroy()方法，该方法中有三个地方比较重要，分别触发Bean的生命周期方法，它们是：processor.postProcessBeforeDestruction(this.bean, this.beanName);
//((DisposableBean) bean).destroy();
//invokeCustomDestroyMethod(this.destroyMethod);
//下面我把用图片来进行直观展示：
//
//Bean的生命周期.png
//
//
//实例运行
//
//User类，这里就是普通的一个Bean,用来添加到容器中，观察其生命周期

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class User implements InitializingBean, DisposableBean {
	private String name;

	public User() {
		System.out.println("调用Bean的函数(constructor)");
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		System.out.println("调用Bean的函数(setName/setAttribute)");
		this.name = name;
	}

	@PostConstruct
	public void postConstruct() {
		System.out.println("调用Bean的函数(postConstruct)");
	} 
	
	// MainConfig中@Bean 的initMethod
	public void initMethod() {
		System.out.println("调用Bean的函数(initMethod)");
	} 
	
	// InitializingBean接口的方法afterPropertiesSet
	@Override
	public void afterPropertiesSet() throws Exception {
		System.out.println("调用Bean的函数(afterPropertiesSet)");
	}

	@PreDestroy
	public void preDestroy() {
		System.out.println("调用Bean的函数(preDestroy)");
	} 
	
	// DisposableBean接口的方法destroy
	@Override
	public void destroy() throws Exception {
		System.out.println("调用Bean的函数(destroy)");
	} 
	
	// MainConfig中@Bean 的destroyMethod
	public void destroyMethod() {
		System.out.println("调用Bean的函数(destroyMethod)");
	}
}